﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CoreData;
using EntityData;
using Helper;
using Services.BusinessRules;
namespace Services
{

    public partial class StudentService
    {
       readonly IStudentEntity entity;
       readonly IClassEntity ClassEnity;
       readonly ICourseEntity CourseEntity;
       readonly Class_FeeTimeService ClassFreeTimeService;
       readonly CourseService CourseService;
       readonly VoucherService ReceiptVoucherService;
       readonly Receipt_VoucherFeeService ReceiptVoucherFeeService;
       readonly Student_FeeEntity StudentFeeEntity;
       readonly Student_FeeTimeEntity StudentFeeTimeEntity;
       public StudentService()
       {
           this.entity = new StudentEntity();
           this.ClassEnity = new ClassEntity();
           this.CourseEntity = new CourseEntity();
           ClassFreeTimeService = new Class_FeeTimeService();
           CourseService = new CourseService();
           ReceiptVoucherService = new VoucherService();
           ReceiptVoucherFeeService = new Receipt_VoucherFeeService();
           StudentFeeEntity = new Student_FeeEntity();
           StudentFeeTimeEntity = new Student_FeeTimeEntity();

       }

       #region SQLCommand

       const string GetMaxStudentCode = "select top 1 Code from Student where ClassID={0} order by ID desc ";

       #endregion

       #region Main Method

       /// <summary>
       /// Save 
       /// </summary>
       /// <param name="_model"></param>
       /// <returns></returns>
       public long Save(object _model, ref string mess)
       {
           try
           {
               var obj = _model as Student;
               var _class = ClassEnity.GetById(obj.ClassID, Table.Class.ToString()) as Class;
               if (Validate(obj, ref mess))
               {
                   var id = obj.ID;;//long.Parse(_model.GetType().GetProperty("ID").GetValue(_model, null).ToString());
                   if (id == 0)
                   {
                       var ID = entity.Save(obj, Table.Student.ToString());

                       //update lai si so cua lop hoc
                      
                       _class.Size = _class.Size + 1;
                       ClassEnity.Update(_class, Table.Class.ToString());

                       //save thu học phí ban đầu là chưa đóng
                       Student_Fee stfee = new Student_Fee();
                       stfee.Money = 0;
                       stfee.Status = 2;
                       stfee.StudentID = ID;
                       StudentFeeEntity.Save(stfee, Table.Student_Fee.ToString());

                       //save số tiền cụ thể cho từng đợt
                       SaveStudentFeeTime(ID, obj.TypeOfFee, obj.TotalFee,obj.ClassID,_class.StartDate, _class.EndDate, DateTime.MinValue,DateTime.MinValue,
                           DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue,
                           DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue);

                       return ID;

                   }
                   else
                   {


                       var oldobj = GetByID(obj.ID);
                       var ID = entity.Update(obj, Table.Student.ToString());

                       var studentfeetime = StudentFeeTimeEntity.GetBySearchString(" StudentID=" + ID, Table.Student_FeeTime.ToString());
                      //if chưa dc thêm thì thêm vào bảng số tiền phải đóng theo định kỳ
                       if(studentfeetime==null ||studentfeetime.Count()==0)
                       {
                           //save số tiền cụ thể cho từng đợt
                           SaveStudentFeeTime(ID, obj.TypeOfFee, obj.TotalFee,obj.ClassID, _class.StartDate, _class.EndDate, DateTime.MinValue, DateTime.MinValue,
                               DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue,
                               DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue);
                       }
                       else
                       {
                           //if(oldobj.TotalFee!= obj.TotalFee)
                           {
                               UpdateStudentFeeTime(ID, obj.TypeOfFee, obj.TotalFee);
                           }
                        }

                       return ID;

                   }
               }
               else
               {
                   return -1;
               }
           }
           catch { return -1; }
       }
       /// <summary>
       /// Save 
       /// </summary>
       /// <param name="_model"></param>
       /// <returns></returns>
       public long SaveDuplicate(object _model, ref string mess)
       {
           try
           {
               var obj = _model as Student;
               var _class = ClassEnity.GetById(obj.ClassID, Table.Class.ToString()) as Class;
               if (Validate2(obj, ref mess))
               {
                   var id = obj.ID;//long.Parse(_model.GetType().GetProperty("ID").GetValue(_model, null).ToString());
                   if (id == 0)
                   {
                     
                       var ID= entity.Save((CoreData.Student)_model, Table.Student.ToString());

                       //save thu học phí ban đầu là chưa đóng
                       Student_Fee stfee = new Student_Fee();
                       stfee.Money = 0;
                       stfee.Status = 1;
                       stfee.StudentID = ID;
                       StudentFeeEntity.Save(stfee, Table.Student_Fee.ToString());

                       //save số tiền cụ thể cho từng đợt
                       SaveStudentFeeTime(ID, obj.TypeOfFee, obj.TotalFee,obj.ClassID, _class.StartDate, _class.EndDate, DateTime.MinValue, DateTime.MinValue,
                           DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue,
                           DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue);
                       return ID;
                   }
                   else
                   {
                     
                       var ID = entity.Update(obj, Table.Student.ToString());

                       var studentfeetime = StudentFeeTimeEntity.GetBySearchString(" StudentID=" + ID, Table.Student_FeeTime.ToString());
                       //if chưa dc thêm thì thêm vào bảng số tiền phải đóng theo định kỳ
                       if (studentfeetime == null || studentfeetime.Count() == 0)
                       {
                           //save số tiền cụ thể cho từng đợt
                           SaveStudentFeeTime(ID, obj.TypeOfFee, obj.TotalFee,obj.ClassID, _class.StartDate, _class.EndDate, DateTime.MinValue, DateTime.MinValue,
                               DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue,
                               DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue);

                       }
                      
                       return ID;
                   }
               }
               else
               {
                   return -1;
               }
           }
           catch { return -1; }
       }

       /// <summary>
       /// Get by ID
       /// </summary>
       /// <param name="_id"></param>
       /// <returns></returns>
       public CoreData.Student GetByID(long _id)
       {
           try
           {
               return entity.GetByCusTomSQL(String.Format(SQLCommand.GetAllStudent," st.ID="+ _id)).FirstOrDefault();
           }
           catch { return null; }
       }

       /// <summary>
       /// Get List
       /// </summary>
       /// <returns></returns>
       public IList<CoreData.Student> GetList()
       {
           try
           {
               return entity.GetByCusTomSQL(String.Format(SQLCommand.GetAllStudent, "st.IsDeleted ='false'")).ToList();
           }
           catch { return null; }

       }

       /// <summary>
       /// Get List with Linq
       /// </summary>
       /// <returns></returns>
       public IList<CoreData.Student> GetListByLINQ(Func<CoreData.Student, Boolean> _where)
       {
           try
           {
               return entity.GetMany(_where, Table.Student.ToString()).ToList();
           }
           catch { return null; }
       }
       /// <summary>
       /// Get One with Linq
       /// </summary>
       /// <returns></returns>
       public CoreData.Student GetOneByLINQ(Func<CoreData.Student, Boolean> _where)
       {
           try
           {
               return entity.Get(_where, Table.Student.ToString());
           }
           catch { return null; }
       }

       /// <summary>
       /// Get List with search string
       /// </summary>
       /// <returns></returns>
       public IList<CoreData.Student> GetList(string _searchstring)
       {
           //search theo tieu chi nao do         
           try
           {
               if (_searchstring != "no")
               {
                   return entity.GetByCusTomSQL(String.Format(SQLCommand.GetAllStudent, "st.IsDeleted ='false' and " + _searchstring)).ToList();
               }
               else
               {
                   return new List<CoreData.Student>();
               }
           }
           catch { return null; }
       }


       /// <summary>
       /// Delete
       /// </summary>
       /// <param name="_model"></param>
       /// <returns></returns>
       public bool Delete(object _model)
       {
           try
           {
               entity.Delete((CoreData.Student)_model, Table.Student.ToString());
               return true;
           }
           catch { return false; }
       }
       /// <summary>
       /// Delete a object by hidden
       /// </summary>
       /// <param name="_model"></param>
       /// <returns></returns>
       public bool UpdateIsDelete(object _model)
       {
           try
           {
               var obj = (CoreData.Student)_model;
               obj.IsDeleted = true;
               entity.Update(obj, Table.Student.ToString());
               return true;
           }
           catch { return false; }
       }

       #endregion



        #region Other Method

       /// <summary>
       /// Lưu số tiền đóng học phí của học viên. trường hợp thêm mới chỉ dùng tới StartDate và Endate, Price mà thôi.
       /// </summary>
       /// <returns></returns>
        public bool SaveStudentFeeTime(long StudentID, int type, long Price, long classID, DateTime StartDate, DateTime EndDate,
            DateTime StartDate1 , DateTime EndDate1, DateTime StartDate2, DateTime EndDate2, DateTime StartDate3, DateTime EndDate3,
            DateTime StartDate4, DateTime EndDate4, DateTime StartDate5, DateTime EndDate5, DateTime StartDate6, DateTime EndDate6,
            int Money1=0, int Money2=0, int Money3=0, int Money4=0, int Money5=0, int Money6=0)
       {

           try
           {
               Student_FeeTime studentfeetime = null;
               Class_FeeTime class_FeeTime = ClassFreeTimeService.GetFeeTimeByClassIDAndType(classID, type);

               try
               {
                   studentfeetime = StudentFeeTimeEntity.GetBySearchString( "StudentID="+StudentID, Table.Student_FeeTime.ToString()).FirstOrDefault();
               }
               catch { }
               if (studentfeetime == null) //them moi
               {
                   #region thêm mới
                   //dong 1 lan
                   if (type == 1)
                   {
                       Student_FeeTime f1 = new Student_FeeTime();
                       f1.StudentID = StudentID;
                       f1.Times = "Một lần";
                       f1.Type = 1;

                       // nếu là một lần thì láy ngày bắt đầu khóa học -1 tháng
                       // ví dụ khóa khai giảng thang 8 thì start là tháng 7 và end là tháng 8

                       f1.StartDate1 = class_FeeTime.StartDate1;
                       f1.EndDate1 = class_FeeTime.EndDate1;
                       f1.Money1 = Price;
                       StudentFeeTimeEntity.Save(f1, Table.Student_FeeTime.ToString());
                      
                   }
                   else if (type == 2)
                   {
                       //dong 2 lan
                       Student_FeeTime f2 = new Student_FeeTime();
                       f2.StudentID = StudentID;
                       f2.Type = 2;
                       f2.Times = "Hai lần";
                       // nếu là 2 lần thì lan 1 láy ngày bắt đầu khóa học -3 tháng
                       //lan 2 thu ngay khai giang den bat dat cua lan 2
                       // ví dụ khóa khai giảng thang 8 thì start là tháng 7 và end là tháng 8


                       f2.StartDate1 = class_FeeTime.StartDate1;
                       f2.EndDate1 = class_FeeTime.EndDate1;

                       f2.StartDate2 = class_FeeTime.StartDate2;
                       f2.EndDate2 = class_FeeTime.EndDate2;

                       f2.Money1 = Price / 2;
                       f2.Money2 = Price / 2;
                       StudentFeeTimeEntity.Save(f2, Table.Student_FeeTime.ToString());
                   }

                   else if (type == 4)
                   {
                       //dong 4 lan
                       Student_FeeTime f4 = new Student_FeeTime();
                       f4.StudentID = StudentID;
                       f4.Type = 4;
                       f4.Times = "Bốn lần";

                       f4.StartDate1 = class_FeeTime.StartDate1;
                       f4.EndDate1 = class_FeeTime.EndDate1;

                       f4.StartDate2 = class_FeeTime.StartDate2;
                       f4.EndDate2 = class_FeeTime.EndDate2;

                       f4.StartDate3 = class_FeeTime.StartDate3;
                       f4.EndDate3 = class_FeeTime.EndDate3;

                       f4.StartDate4 = class_FeeTime.StartDate4;
                       f4.EndDate4 = class_FeeTime.EndDate4;

                       f4.Money1 = (Price) / 4;
                       f4.Money2 = (Price) / 4;
                       f4.Money3 = (Price) / 4;
                       f4.Money4 = (Price) / 4;
                       StudentFeeTimeEntity.Save(f4, Table.Student_FeeTime.ToString());

                   }
                   else if (type == 6)
                   {
                       //dong 6 lan
                       Student_FeeTime f6 = new Student_FeeTime();
                       f6.StudentID = StudentID;
                       f6.Type = 6;

                       f6.Times = "Sáu lần";

                       f6.StartDate1 = class_FeeTime.StartDate1;
                       f6.EndDate1 = class_FeeTime.EndDate1 ;

                       f6.StartDate2 = class_FeeTime.StartDate2;
                       f6.EndDate2 = class_FeeTime.EndDate2;

                       f6.StartDate3 = class_FeeTime.StartDate3;
                       f6.EndDate3 = class_FeeTime.EndDate3;

                       f6.StartDate4 = class_FeeTime.StartDate4;
                       f6.EndDate4 = class_FeeTime.EndDate4;

                       f6.StartDate5 = class_FeeTime.StartDate5;
                       f6.EndDate5 = class_FeeTime.EndDate5;

                       f6.StartDate6 = class_FeeTime.StartDate6;
                       f6.EndDate6 = class_FeeTime.EndDate6;

                       f6.Money1 = (Price) / 6;
                       f6.Money2 = (Price) / 6;
                       f6.Money3 = (Price) / 6;
                       f6.Money4 = (Price) / 6;
                       f6.Money5 = (Price) / 6;
                       f6.Money6 = (Price) / 6;
                       StudentFeeTimeEntity.Save(f6, Table.Student_FeeTime.ToString());
                   }
                   #endregion
               }
               else
               {
                   #region Update
                   //dong 1 lan
                   if (type == 1)
                   {
                       studentfeetime.StudentID = StudentID;
                       studentfeetime.StartDate1 = StartDate1;
                       studentfeetime.EndDate1 = EndDate1;
                       studentfeetime.Money1 = Money1;
                       StudentFeeTimeEntity.Update(studentfeetime, Table.Student_FeeTime.ToString());

                       UpDateFeeTimeString(StudentID, "Lần 1", studentfeetime.StartDate1, studentfeetime.EndDate1);
                   }
                   else if (type == 2)
                   {
                       //dong 2 lan
                       Student_FeeTime f2 = new Student_FeeTime();
                       studentfeetime.StartDate1 = StartDate1;
                       studentfeetime.EndDate1 = EndDate1;
                       studentfeetime.StartDate2 = StartDate2;
                       studentfeetime.EndDate2 = EndDate2;
                       studentfeetime.Money1 = Money1;
                       studentfeetime.Money2 = Money2;
                       StudentFeeTimeEntity.Update(studentfeetime, Table.Student_FeeTime.ToString());

                       UpDateFeeTimeString(StudentID, "Lần 1", studentfeetime.StartDate1, studentfeetime.EndDate1);
                       UpDateFeeTimeString(StudentID, "Lần 2", studentfeetime.StartDate2, studentfeetime.EndDate2);
                   }

                   else if (type == 4)
                   {
                       //dong 4 lan
                       studentfeetime.StudentID = StudentID;

                       studentfeetime.StartDate1 = StartDate1;
                       studentfeetime.EndDate1 = StartDate1;

                       studentfeetime.StartDate2 = StartDate2;
                       studentfeetime.EndDate2 = EndDate2;

                       studentfeetime.StartDate3 = StartDate3;
                       studentfeetime.EndDate3 = EndDate3;

                       studentfeetime.StartDate4 = StartDate4;
                       studentfeetime.EndDate4 = EndDate4;

                       studentfeetime.Money1 = Money1;
                       studentfeetime.Money2 = Money2;
                       studentfeetime.Money3 = Money3;
                       studentfeetime.Money4 = Money4;
                       StudentFeeTimeEntity.Update(studentfeetime, Table.Student_FeeTime.ToString());

                       UpDateFeeTimeString(StudentID, "Lần 1", studentfeetime.StartDate1, studentfeetime.EndDate1);
                       UpDateFeeTimeString(StudentID, "Lần 2", studentfeetime.StartDate2, studentfeetime.EndDate2);
                       UpDateFeeTimeString(StudentID, "Lần 3", studentfeetime.StartDate3, studentfeetime.EndDate3);
                       UpDateFeeTimeString(StudentID, "Lần 4", studentfeetime.StartDate4, studentfeetime.EndDate4);

                   }
                   else if (type == 6)
                   {
                       //dong 6 lan

                       studentfeetime.StartDate1 = StartDate1;
                       studentfeetime.EndDate1 = StartDate2;

                       studentfeetime.StartDate2 = StartDate2;
                       studentfeetime.EndDate2 = EndDate2;

                       studentfeetime.StartDate3 = StartDate3;
                       studentfeetime.EndDate3 = EndDate3;

                       studentfeetime.StartDate4 = StartDate4;
                       studentfeetime.EndDate4 = EndDate4;

                       studentfeetime.StartDate5 = StartDate5;
                       studentfeetime.EndDate5 = EndDate5;

                       studentfeetime.StartDate6 = StartDate6;
                       studentfeetime.EndDate6 = EndDate6;

                       studentfeetime.Money1 = Money1;
                       studentfeetime.Money2 = Money2;
                       studentfeetime.Money3 = Money3;
                       studentfeetime.Money4 = Money4;
                       studentfeetime.Money5 = Money5;
                       studentfeetime.Money6 = Money6;
                       StudentFeeTimeEntity.Update(studentfeetime, Table.Student_FeeTime.ToString());

                       UpDateFeeTimeString(StudentID, "Lần 1", studentfeetime.StartDate1, studentfeetime.EndDate1);
                       UpDateFeeTimeString(StudentID, "Lần 2", studentfeetime.StartDate2, studentfeetime.EndDate2);
                       UpDateFeeTimeString(StudentID, "Lần 3", studentfeetime.StartDate3, studentfeetime.EndDate3);
                       UpDateFeeTimeString(StudentID, "Lần 4", studentfeetime.StartDate4, studentfeetime.EndDate4);
                       UpDateFeeTimeString(StudentID, "Lần 5", studentfeetime.StartDate5, studentfeetime.EndDate5);
                       UpDateFeeTimeString(StudentID, "Lần 6", studentfeetime.StartDate6, studentfeetime.EndDate6);
                   }

                   #endregion
               }
              
               return true;
               
            }
           catch
           {
               return false;
            }

        }

        /// <summary>
        /// Cập nhật lại chuỗi timefee trong phiếu thu học phí khi có thay đổi ngày tháng
        /// </summary>
        /// <param name="StudentID"></param>
        /// <param name="timestring"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        void UpDateFeeTimeString(long StudentID, string timestring, DateTime start, DateTime end)
        {
            IList<Receipt_VoucherFee> feeVouchers = ReceiptVoucherFeeService.GetByStudentID(StudentID);
            if (feeVouchers != null && feeVouchers.Count != 0)
            {
                feeVouchers = feeVouchers.Where(c => c.TimeFee.Contains(timestring)).ToList();
                foreach (Receipt_VoucherFee item in feeVouchers)
                {
                    Receipt_FeeTimeObject obj = new Receipt_FeeTimeObject();
                    obj.starttime = start;
                    obj.endtime = end;
                    obj.Name = timestring;
                    item.TimeFee = obj.ToString();
                    ReceiptVoucherFeeService.Save(item);
                }

            }
        }


        /// <summary>
        /// Update nếu giá cũ mà khác giá mơi
        /// </summary>
        /// <returns></returns>
        bool UpdateStudentFeeTime(long StudentID, int type, long Price)
        {

            try
            {
                Student_FeeTime studentfeetime = null;
                try
                {
                    studentfeetime = StudentFeeTimeEntity.GetBySearchString(" StudentID="+StudentID, Table.Student_FeeTime.ToString()).FirstOrDefault();
                }
                catch { }
               
                {
                    studentfeetime.Type = type;
                    #region cap nhat
                    //dong 1 lan
                    if (type == 1)
                    {
                        studentfeetime.Money1 = Price;
                        StudentFeeTimeEntity.Update(studentfeetime, Table.Student_FeeTime.ToString());
                    }
                    else if (type == 2)
                    {


                        studentfeetime.Money1 = Price / 2;
                        studentfeetime.Money2 = Price / 2;
                        StudentFeeTimeEntity.Update(studentfeetime, Table.Student_FeeTime.ToString());
                    }

                    else if (type == 4)
                    {
                        //dong 4 lan


                        studentfeetime.Money1 = (Price) / 4;
                        studentfeetime.Money2 = (Price) / 4;
                        studentfeetime.Money3 = (Price) / 4;
                        studentfeetime.Money4 = (Price) / 4;
                        StudentFeeTimeEntity.Update(studentfeetime, Table.Student_FeeTime.ToString());

                    }
                    else if (type == 6)
                    {
                        //dong 6 lan


                        studentfeetime.Money1 = (Price) / 6;
                        studentfeetime.Money2 = (Price) / 6;
                        studentfeetime.Money3 = (Price) / 6;
                        studentfeetime.Money4 = (Price) / 6;
                        studentfeetime.Money5 = (Price) / 6;
                        studentfeetime.Money6 = (Price) / 6;
                        StudentFeeTimeEntity.Update(studentfeetime, Table.Student_FeeTime.ToString());
                    }
                    #endregion
                }
               

                return true;

            }
            catch
            {
                return false;
            }

        }


       public IList<CoreData.Student> GetByClassID(long ClassID)
       {
           return GetList(" st.ClassID=" + ClassID);
       }

       public IList<CoreData.Student> GetByStatusID(long Status)
       {
           return GetList(" st.Status=" + Status);
       }
       public IList<CoreData.Student> GetByChannelID(long Channel)
       {
           return GetList(" st.ChannelInfoID =" + Channel);
       }


       public IList<CoreData.Student> GetByCourseID(long CourseID)
       {
           return GetList(" co.ID =" + CourseID);
       }

       public  IList<CoreData.Student> GetByBranchID(long BranchID, DateTime datefrom, DateTime dateto)
       {

          string SearchString = "br.ID=" + BranchID + " and  Convert(varchar(11), st.DateOfAdmission, 120) BETWEEN '" + datefrom.ToString("yyyy-MM-dd") + "' and '" + dateto.ToString("yyyy-MM-dd") + "'";
          return GetList(SearchString);
       }

        public  IList<CoreData.Student> GetByMultiCondition(long BranchID, long CourseID, long ClassID, long StatusID, 
           long ChannelID, DateTime datefrom, DateTime dateto, int birthfrom, int birthto)
        {
            string SearchString = "";
            if (BranchID != 0)
            {
                SearchString += " br.ID=" + BranchID + "  and";
            }
            if (CourseID != 0)
            {
                SearchString += " co.ID=" + CourseID + "  and";
            }
            if (ClassID != 0)
            {
                SearchString += " c.ID=" + ClassID + "  and";
            }
            if (StatusID != 0)
            {
                SearchString += " st_st.ID=" + StatusID + "  and";
            }
            if (ChannelID != 0)
            {
                SearchString += " ch.ID=" + ChannelID + "  and";
            }
            if (birthfrom != 0 && birthto!=0)
            {
                SearchString += " (year(st.DateOfBirth) >= " + birthfrom + " and year(st.DateOfBirth) <="+birthto +") and";
            }
            if (birthfrom != 0 && birthto == 0)
            {
                SearchString += " (year(st.DateOfBirth) = " + birthfrom+" and";
            }

            SearchString += "  Convert(varchar(11), st.DateOfAdmission, 120) BETWEEN '" + datefrom.ToString("yyyy-MM-dd") + "' and '" + dateto.ToString("yyyy-MM-dd") + "'";

          // SearchString = SearchString.Remove(SearchString.Length - 3, 3);
            return GetList(SearchString);
        }


       
       bool Validate(Student obj, ref string mess)
       {

           new ValidateRequired("Mã học viên", "Code", obj.Code);
           new ValidateRequired("Tên học viên", "Name", obj.Name);
           new ValidateRequired("Họ", "FirstName", obj.FirstName);
           new ValidateRequired("Tên", "LastName", obj.LastName);
          // new ValidateRequired("Địa chỉ", "Address", obj.Address);
           if (obj.ClassID == 0)
           {
               new ValidateRequired("Lớp", "Lớp", "");
           }
           if (obj.Status == 0)
           {
               new ValidateRequired("Trạng thái", "Status", "");
           }
           if (obj.ChannelInfoID == 0)
           {
               new ValidateRequired("Kênh thông tin", "Channel", "");
           }
           if (obj.TypeOfFee == 0)
           {
               new ValidateRequired("Hình thức đóng học phí", "Type of fee", "");
           }

       //   new ValidateExist("Mã học viên", "Code", "Code", obj, GetList().Cast<object>().ToList());
        //   new ValidateExist("Tên học viên", "Name", "Name", obj, GetList().Cast<object>().ToList());
          // new ValidateExist("Email", "Email", "Email", obj, GetList().Cast<object>().ToList());
//new ValidateLenght("Điện thoại", "Phone", obj.Phone, 15);
//new ValidateLenght("Email", "Email", obj.Email, 50);
         //  new ValidateLenght("CMND", "IndentifyNumber", obj.IndentifyNumber, 15);
           mess = BusinessObject.Validate();
           BusinessObject.Clear();

           //if (mess == null)
           //{

           //    var code = GetOneByCode(obj.Code);
           //    if (code != null && (obj.ID != code.ID))
           //    {
           //        mess = "Mã học viên bị trùng";
           //    }
           //}

          
           return mess == null ? true : false;
       }

       bool Validate2(Student obj, ref string mess)
       {

           new ValidateRequired("Mã học viên", "Code", obj.Code);
           new ValidateRequired("Tên học viên", "Name", obj.Name);
           new ValidateRequired("Họ", "FirstName", obj.FirstName);
           new ValidateRequired("Tên", "LastName", obj.LastName);
        //   new ValidateRequired("Địa chỉ", "Address", obj.Address);
           if (obj.ClassID == 0)
           {
               new ValidateRequired("Lớp", "Lớp", "");
           }
           if (obj.Status == 0)
           {
               new ValidateRequired("Trạng thái", "Status", "");
           }
           if (obj.ChannelInfoID == 0)
           {
               new ValidateRequired("Kênh thông tin", "Channel", "");
           }
           if (obj.TypeOfFee == 0)
           {
               new ValidateRequired("Hình thức đóng học phí", "Type of fee", "");
           }
          
//           new ValidateLenght("Điện thoại", "Phone", obj.Phone, 15);
           new ValidateLenght("Email", "Email", obj.Email, 50);
           new ValidateLenght("CMND", "IndentifyNumber", obj.IndentifyNumber, 15);
           mess = BusinessObject.Validate();
           BusinessObject.Clear();
           return mess == null ? true : false;
       }


        /// <summary>
        /// Chuyển đổi hình thức đóng học phí
        /// </summary>
        /// <returns></returns>
       public int ExcuteChangeTypeOfFee(long StudentID, int newtype)
       {
           //tra ve 0 neu như chưa đóng học phí lần nào
           //trả về 1 nếu chuyển thành công
           //trả về -1 nếu chuyển thất bại
           int result = 0;

           try
           {
               //b1. lấy thông tin học viên
               var student = GetByID(StudentID);

               //b2. lấy thông tin khóa học và kỳ hạn đóng học phí của lớp học
              // var course = CourseService.GetbyClassID(student.ClassID);
               var classfeetime = ClassFreeTimeService.GetFeeTimeByClassIDAndType(student.ClassID, newtype);

               //Tinh lại học phí (vì trường hợp sẽ có giảm giá)
               switch (newtype)
               {
                   case 1:
                       classfeetime.Money1 = student.TotalFee;
                       break;
                   case 2:
                       classfeetime.Money1 = student.TotalFee / 2;
                       classfeetime.Money2 = student.TotalFee / 2;
                       break;
                   case 3:
                       classfeetime.Money1 = student.TotalFee / 3;
                       classfeetime.Money2 = student.TotalFee / 3;
                       classfeetime.Money3 = student.TotalFee / 3;
                       break;
                   case 4:
                       classfeetime.Money1 = student.TotalFee / 4;
                       classfeetime.Money2 = student.TotalFee / 4;
                       classfeetime.Money3 = student.TotalFee / 4;
                       classfeetime.Money4 = student.TotalFee / 4;
                       break;
                   case 6:
                       classfeetime.Money1 = student.TotalFee / 6;
                       classfeetime.Money2 = student.TotalFee / 6;
                       classfeetime.Money3 = student.TotalFee / 6;
                       classfeetime.Money4 = student.TotalFee / 6;
                       classfeetime.Money5 = student.TotalFee / 6;
                       classfeetime.Money6 = student.TotalFee / 6;
                       break;
                   
               }


               //b3. thực hiện chuyển đổi
               //b3.1 lay het phieu thu hoc phi cua hoc vien nay
               var allreceipt = ReceiptVoucherFeeService.GetList(" Receipt_VoucherFee.StudentID=" + student.ID);
               if (allreceipt != null && allreceipt.Count != 0)
               {
                   if (newtype != student.TypeOfFee)
                   {
                      
                       #region xu ly chi mot lan
                       if (newtype == 1) // nếu là một lần thì chuyển tất cả số phiểu về 1 lần lun
                       {
                           // var studentfee = StudentFeeEntity.GetBySearchString(" Student_Fee.StudentID=" + student.ID, Table.Student_Fee.ToString()).FirstOrDefault();       
                           foreach (var item in allreceipt)
                           {
                               item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[0];
                               ReceiptVoucherFeeService.Save(item);
                           }
                       }
                       #endregion

                       #region xu ly cho hai lan
                       if (newtype == 2)
                       {
                           
                           var tienlan1 = classfeetime.Money1;
                           var tienlan2 = classfeetime.Money2;
                           long tong = 0;
                           var subdata1 = allreceipt.Where(c => c.TimeFee.Contains("Lần 1")).OrderBy(c => c.ID);
                           foreach (var item in subdata1)
                           {
                               if (tong > tienlan1) //neu tông lân 1 cũ mà = tổng lân 1 mới thi chuyển các phiêu thu còn lại qua lần 2
                               {
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[1];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                             //  else if (tong > tienlan1)
                             //  {
                                   //int sodu = tong - tienlan1;

                             //  }
                               else // lay cac phieu thu lan 1 cho tới khi nào đủ số tiền quy định lần 1 thì thôi
                               {
                                   tong = tong + item.Money;
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[0];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                           }
                       }
                       #endregion

                       #region xu ly cho 3 lan
                       if (newtype == 3)
                       {
 
                           var tienlan1 = classfeetime.Money1;
                           var tienlan2 = classfeetime.Money2;
                           long tong = 0;
                           var subdata1 = allreceipt.Where(c => c.TimeFee.Contains("Lần 1")).OrderBy(c => c.ID);
                           var subdata2 = allreceipt.Where(c => c.TimeFee.Contains("Lần 2")).OrderBy(c => c.ID);
                           foreach (var item in subdata1)
                           {
                               if (tong > tienlan1) //neu tông lân 1 cũ mà = tổng lân 1 mới thi chuyển các phiêu thu còn lại qua lần 2
                               {
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[1];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                               else // lay cac phieu thu lan 1 cho tới khi nào đủ số tiền quy định lần 1 thì thôi
                               {
                                   tong = tong + item.Money;
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[0];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                           }
                           tong = 0;
                           foreach (var item in subdata2)
                           {
                               if (tong > tienlan2) //neu tông lân 2 cũ mà = tổng lân 2 mới thi chuyển các phiêu thu còn lại qua lần 3
                               {
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[2];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                               else // lay cac phieu thu lan 2 cho tới khi nào đủ số tiền quy định lần 2 thì thôi
                               {
                                   tong = tong + item.Money;
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[1];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                           }
                       }
                       #endregion

                       #region xu ly cho 4 lan
                       if (newtype == 4)
                       {
                          
                           var tienlan1 = classfeetime.Money1;
                           var tienlan2 = classfeetime.Money2;
                           var tienlan3 = classfeetime.Money3;
                           long tong = 0;
                           var subdata1 = allreceipt.Where(c => c.TimeFee.Contains("Lần 1")).OrderBy(c => c.ID);
                           var subdata2 = allreceipt.Where(c => c.TimeFee.Contains("Lần 2")).OrderBy(c => c.ID);
                           var subdata3 = allreceipt.Where(c => c.TimeFee.Contains("Lần 3")).OrderBy(c => c.ID);
                           foreach (var item in subdata1)
                           {
                               if (tong > tienlan1) //neu tông lân 1 cũ mà = tổng lân 1 mới thi chuyển các phiêu thu còn lại qua lần 2
                               {
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[1];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                               else // lay cac phieu thu lan 1 cho tới khi nào đủ số tiền quy định lần 1 thì thôi
                               {
                                   tong = tong + item.Money;
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[0];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                           }
                           tong = 0;
                           foreach (var item in subdata2)
                           {
                               if (tong > tienlan2) //neu tông lân 2 cũ mà = tổng lân 2 mới thi chuyển các phiêu thu còn lại qua lần 3
                               {
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[2];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                               else // lay cac phieu thu lan 2 cho tới khi nào đủ số tiền quy định lần 2 thì thôi
                               {
                                   tong = tong + item.Money;
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[1];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                           } tong = 0;
                           foreach (var item in subdata3)
                           {
                               if (tong > tienlan3) //neu tông lân 3 cũ mà = tổng lân 3 mới thi chuyển các phiêu thu còn lại qua lần 4
                               {
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[3];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                               else // lay cac phieu thu lan 3 cho tới khi nào đủ số tiền quy định lần 3 thì thôi
                               {
                                   tong = tong + item.Money;
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[2];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                           }
                           tong = 0;
                       }
                       #endregion

                       #region xu ly cho 6 lan
                       if (newtype == 6)
                       {
                          
                           var tienlan1 = classfeetime.Money1;
                           var tienlan2 = classfeetime.Money2;
                           var tienlan3 = classfeetime.Money3;
                           var tienlan4 = classfeetime.Money4;
                           var tienlan5 = classfeetime.Money5;
                           long tong = 0;
                           var subdata1 = allreceipt.Where(c => c.TimeFee.Contains("Lần 1")).OrderBy(c => c.ID);
                           var subdata2 = allreceipt.Where(c => c.TimeFee.Contains("Lần 2")).OrderBy(c => c.ID);
                           var subdata3 = allreceipt.Where(c => c.TimeFee.Contains("Lần 3")).OrderBy(c => c.ID);
                           var subdata4 = allreceipt.Where(c => c.TimeFee.Contains("Lần 4")).OrderBy(c => c.ID);
                           var subdata5 = allreceipt.Where(c => c.TimeFee.Contains("Lần 5")).OrderBy(c => c.ID);
                           foreach (var item in subdata1)
                           {
                               if (tong > tienlan1) //neu tông lân 1 cũ mà = tổng lân 1 mới thi chuyển các phiêu thu còn lại qua lần 2
                               {
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[1];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                               else // lay cac phieu thu lan 1 cho tới khi nào đủ số tiền quy định lần 1 thì thôi
                               {
                                   tong = tong + item.Money;
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[0];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                           }
                           tong = 0;
                           foreach (var item in subdata2)
                           {
                               if (tong > tienlan2) //neu tông lân 2 cũ mà = tổng lân 2 mới thi chuyển các phiêu thu còn lại qua lần 3
                               {
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[2];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                               else // lay cac phieu thu lan 2 cho tới khi nào đủ số tiền quy định lần 2 thì thôi
                               {
                                   tong = tong + item.Money;
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[1];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                           }
                           tong = 0;
                           foreach (var item in subdata3)
                           {
                               if (tong > tienlan3) //neu tông lân 3 cũ mà = tổng lân 3 mới thi chuyển các phiêu thu còn lại qua lần 4
                               {
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[2];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                               else // lay cac phieu thu lan 3 cho tới khi nào đủ số tiền quy định lần 3 thì thôi
                               {
                                   tong = tong + item.Money;
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[1];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                           }
                           tong = 0;
                           foreach (var item in subdata4)
                           {
                               if (tong > tienlan4) //neu tông lân 4 cũ mà = tổng lân 4 mới thi chuyển các phiêu thu còn lại qua lần 5
                               {
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[2];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                               else // lay cac phieu thu lan 4 cho tới khi nào đủ số tiền quy định lần 4 thì thôi
                               {
                                   tong = tong + item.Money;
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[1];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                           }
                           tong = 0;
                           foreach (var item in subdata5)
                           {
                               if (tong > tienlan5) //neu tông lân 5 cũ mà = tổng lân 5 mới thi chuyển các phiêu thu còn lại qua lần 6
                               {
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[2];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                               else // lay cac phieu thu lan 5 cho tới khi nào đủ số tiền quy định lần 5 thì thôi
                               {
                                   tong = tong + item.Money;
                                   item.TimeFee = LoadFeeTimeStrings(student.ID, newtype)[1];
                                   ReceiptVoucherFeeService.Save(item);
                               }
                           }
                           tong = 0;
                       }


                       #endregion

                       result = 1;

                   }

               }
               else //truong hop nay thì binh thuong không cân chuyển tiền vì chưa đóng học phí lần nào
               {
                   result = 0;
               }
               #region Update ngay dong

               Student_FeeTime student_feeTime = StudentFeeTimeEntity.GetBySearchString(" StudentID=" + student.ID, Table.Student_FeeTime.ToString()).FirstOrDefault();
               switch (newtype)
               {
                   case 1:
                       if (student_feeTime != null)
                       {
                           student_feeTime.Type = newtype;
                           student_feeTime.StartDate1 = classfeetime.StartDate1;
                           student_feeTime.EndDate1 = classfeetime.EndDate1;
                           student_feeTime.Money1 = classfeetime.Money1;
                           student_feeTime.Times = "Một Lần";
                           StudentFeeTimeEntity.Update(student_feeTime, Table.Student_FeeTime.ToString());
                       }
                       break;
                   case 2:
                       if (student_feeTime != null)
                       {
                           student_feeTime.Type = newtype;
                           student_feeTime.StartDate1 = classfeetime.StartDate1;
                           student_feeTime.EndDate1 = classfeetime.EndDate1;
                           student_feeTime.Money1 = classfeetime.Money1;
                           student_feeTime.StartDate2 = classfeetime.StartDate2;
                           student_feeTime.EndDate2 = classfeetime.EndDate2;
                           student_feeTime.Money2 = classfeetime.Money2;
                           student_feeTime.Times = "Hai Lần";
                           StudentFeeTimeEntity.Update(student_feeTime, Table.Student_FeeTime.ToString());
                       }
                       break;
                   case 3:
                       if (student_feeTime != null)
                       {
                           student_feeTime.Type = newtype;
                           student_feeTime.StartDate1 = classfeetime.StartDate1;
                           student_feeTime.EndDate1 = classfeetime.EndDate1;
                           student_feeTime.Money1 = classfeetime.Money1;
                           student_feeTime.StartDate2 = classfeetime.StartDate2;
                           student_feeTime.EndDate2 = classfeetime.EndDate2;
                           student_feeTime.Money2 = classfeetime.Money2;
                           student_feeTime.StartDate3 = classfeetime.StartDate3;
                           student_feeTime.EndDate3 = classfeetime.EndDate3;
                           student_feeTime.Money3 = classfeetime.Money3;
                           student_feeTime.Times = "Ba Lần";
                           StudentFeeTimeEntity.Update(student_feeTime, Table.Student_FeeTime.ToString());
                       }
                       break;
                   case 4:
                       if (student_feeTime != null)
                       {
                           student_feeTime.Type = newtype;
                           student_feeTime.StartDate1 = classfeetime.StartDate1;
                           student_feeTime.EndDate1 = classfeetime.EndDate1;
                           student_feeTime.Money1 = classfeetime.Money1;
                           student_feeTime.StartDate2 = classfeetime.StartDate2;
                           student_feeTime.EndDate2 = classfeetime.EndDate2;
                           student_feeTime.Money2 = classfeetime.Money2;
                           student_feeTime.StartDate3 = classfeetime.StartDate3;
                           student_feeTime.EndDate3 = classfeetime.EndDate3;
                           student_feeTime.Money3 = classfeetime.Money3;
                           student_feeTime.StartDate4 = classfeetime.StartDate4;
                           student_feeTime.EndDate4 = classfeetime.EndDate4;
                           student_feeTime.Money4 = classfeetime.Money4;
                           student_feeTime.Times = "Bốn Lần";
                           StudentFeeTimeEntity.Update(student_feeTime, Table.Student_FeeTime.ToString());
                       }
                       break;
                   case 6:
                       if (student_feeTime != null)
                       {
                           student_feeTime.Type = newtype;
                           student_feeTime.StartDate1 = classfeetime.StartDate1;
                           student_feeTime.EndDate1 = classfeetime.EndDate1;
                           student_feeTime.Money1 = classfeetime.Money1;
                           student_feeTime.StartDate2 = classfeetime.StartDate2;
                           student_feeTime.EndDate2 = classfeetime.EndDate2;
                           student_feeTime.Money2 = classfeetime.Money2;
                           student_feeTime.StartDate3 = classfeetime.StartDate3;
                           student_feeTime.EndDate3 = classfeetime.EndDate3;
                           student_feeTime.Money3 = classfeetime.Money3;
                           student_feeTime.StartDate4 = classfeetime.StartDate4;
                           student_feeTime.EndDate4 = classfeetime.EndDate4;
                           student_feeTime.Money4 = classfeetime.Money4;
                           student_feeTime.StartDate5 = classfeetime.StartDate5;
                           student_feeTime.EndDate5 = classfeetime.EndDate5;
                           student_feeTime.Money5 = classfeetime.Money5;
                           student_feeTime.StartDate6 = classfeetime.StartDate6;
                           student_feeTime.EndDate6 = classfeetime.EndDate6;
                           student_feeTime.Money6 = classfeetime.Money6;
                           student_feeTime.Times = "Sáu Lần";
                           StudentFeeTimeEntity.Update(student_feeTime, Table.Student_FeeTime.ToString());
                       }
                       break;
               }
               #endregion

           }
           catch {
               result = -1; //loi
           }
           return result;
       }

        //ham bổ trợ cho hàm chuyển hình thức đóng học phí
      List<string>  LoadFeeTimeStrings(long studentid, int type)
       {
           List<string> lst = new List<string>();
           var data = ClassFreeTimeService.GetFeeTimeByStudentIDAndType(studentid, type);
           if (data.Type == 1)
           {
              
               Receipt_FeeTimeObject item = new Receipt_FeeTimeObject();
               item.starttime = data.StartDate1;
               item.endtime = data.EndDate1;
               item.Name = "Lần 1";
               lst.Add(item.ToString());
           }

           if (data.Type == 2)
           {
              
               Receipt_FeeTimeObject item1 = new Receipt_FeeTimeObject();
               item1.starttime = data.StartDate1;
               item1.endtime = data.EndDate1;
               item1.Name = "Lần 1";

               Receipt_FeeTimeObject item2 = new Receipt_FeeTimeObject();
               item2.starttime = data.StartDate2;
               item2.endtime = data.EndDate2;
               item2.Name = "Lần 2";


               lst.Add(item1.ToString());
               lst.Add(item2.ToString());
           }


           if (data.Type == 3)
           {
             
               Receipt_FeeTimeObject item1 = new Receipt_FeeTimeObject();
               item1.starttime = data.StartDate1;
               item1.endtime = data.EndDate1;
               item1.Name = "Lần 1";

               Receipt_FeeTimeObject item2 = new Receipt_FeeTimeObject();
               item2.starttime = data.StartDate2;
               item2.endtime = data.EndDate2;
               item2.Name = "Lần 2";

               Receipt_FeeTimeObject item3 = new Receipt_FeeTimeObject();
               item3.starttime = data.StartDate3;
               item3.endtime = data.EndDate3;
               item3.Name = "Lần 3";

               lst.Add(item1.ToString());
               lst.Add(item2.ToString());
               lst.Add(item3.ToString());
           }

           if (data.Type == 4)
           {
              
               Receipt_FeeTimeObject item1 = new Receipt_FeeTimeObject();
               item1.starttime = data.StartDate1;
               item1.endtime = data.EndDate1;
               item1.Name = "Lần 1";

               Receipt_FeeTimeObject item2 = new Receipt_FeeTimeObject();
               item2.starttime = data.StartDate2;
               item2.endtime = data.EndDate2;
               item2.Name = "Lần 2";

               Receipt_FeeTimeObject item3 = new Receipt_FeeTimeObject();
               item3.starttime = data.StartDate3;
               item3.endtime = data.EndDate3;
               item3.Name = "Lần 3";

               Receipt_FeeTimeObject item4 = new Receipt_FeeTimeObject();
               item4.starttime = data.StartDate4;
               item4.endtime = data.EndDate4;
               item4.Name = "Lần 4";

               lst.Add(item1.ToString());
               lst.Add(item2.ToString());
               lst.Add(item3.ToString());
               lst.Add(item4.ToString());
           }

           if (data.Type == 6)
           {
               
               Receipt_FeeTimeObject item1 = new Receipt_FeeTimeObject();
               item1.starttime = data.StartDate1;
               item1.endtime = data.EndDate1;
               item1.Name = "Lần 1";

               Receipt_FeeTimeObject item2 = new Receipt_FeeTimeObject();
               item2.starttime = data.StartDate2;
               item2.endtime = data.EndDate2;
               item2.Name = "Lần 2";

               Receipt_FeeTimeObject item3 = new Receipt_FeeTimeObject();
               item3.starttime = data.StartDate3;
               item3.endtime = data.EndDate3;
               item3.Name = "Lần 3";

               Receipt_FeeTimeObject item4 = new Receipt_FeeTimeObject();
               item4.starttime = data.StartDate4;
               item4.endtime = data.EndDate4;
               item4.Name = "Lần 4";

               Receipt_FeeTimeObject item5 = new Receipt_FeeTimeObject();
               item5.starttime = data.StartDate5;
               item5.endtime = data.EndDate5;
               item5.Name = "Lần 5";

               Receipt_FeeTimeObject item6 = new Receipt_FeeTimeObject();
               item6.starttime = data.StartDate6;
               item6.endtime = data.EndDate6;
               item6.Name = "Lần 6";

               lst.Add(item1.ToString());
               lst.Add(item2.ToString());
               lst.Add(item3.ToString());
               lst.Add(item4.ToString());
               lst.Add(item5.ToString());
               lst.Add(item6.ToString());
           }

           return lst;
       }

      public string GenerateCode(long ClassID)
      {
           var data = entity.GetByCusTomSQL(String.Format(GetMaxStudentCode,ClassID)).FirstOrDefault();
           var Class = ClassEnity.GetById(ClassID, Table.Class.ToString());
           //var Course = CourseEntity.GetById(Class.CourseID, Table.Course.ToString());
           string Code = "";
           string AutoNum = "001";
           string month = Class.StartDate.Month.ToString();
           string year = Class.StartDate.Year.ToString().Substring(DateTime.Now.Year.ToString().Length - 2);
           if (month.Length < 2)
           {
               month = month.Insert(0, "0");
           }
           if (data == null)
           {
               Code = Class.Name + month + year + "-" + AutoNum;
           }
           else
           {
               AutoNum = data.Code.Split('-')[1];
               int autonum = int.Parse(AutoNum) + 1;
               if (autonum <= 9)
               {
                   AutoNum = "00" + autonum.ToString();
               }
               else if (autonum <= 99 && autonum > 9)
               {
                   AutoNum = "0" + autonum.ToString();
               }
               else
               {
                   AutoNum = autonum.ToString();
                }
               Code = Class.Name + month + year + "-" + AutoNum;
           }
           return Code;
      }


      public CoreData.Student GetOneByCode(string Code)
      {
          try
          {
              return entity.GetByCusTomSQL(String.Format(SQLCommand.GetAllStudent, " st.Code='" + Code+"'")).FirstOrDefault();
          }
          catch { return null; }
      }

      public CoreData.Student GetByTempStudentID(long tempStudentId)
      {
          try
          {
              return entity.GetByCusTomSQL(String.Format("Select * from Student where TempStudentID={0}", tempStudentId)).FirstOrDefault();
          }
          catch { return null; }
      }

    /// <summary>
    /// Lấy ds bảo lưu
    /// </summary>
    /// <returns></returns>
      public IList<Student> GetListStudentReserved()
      {
          return GetList(" st.Status =2 and (datepart(MM ,GETDATE()) - MONTH(st.DateOfReserved))>=4");
      }

        #endregion 
    
    }
         
}
